package com.dao;

import com.entity.Comment;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface CommentDao {

  /**
   * 获取所有评论数量
   *
   * @return 评论数量
   */
  int selectAllCommentCount();

  /**
   * 获取所有评论信息
   *
   * @return 获取所有评论信息
   */
  List<Map<String, Object>> selectAllComments(@Param("start") int start, @Param("num") int num);

  /**
   * 获取一个商品的所有评论数目
   *
   * @param goodId 商品编号
   * @return 商品的所有评论数目
   */
  int selectGoodCommentCount(@Param("goodId") String goodId);

  /**
   * 获取一个商品的楼主评论（不是回复别人的)
   *
   * @param goodId 商品编号
   * @return 一个商品的楼主评论
   */
  List<Comment> selectNoDadComments(@Param("goodId") String goodId);

  /**
   * 获取回复一个楼下的所有评论
   *
   * @param floorId 楼号（也就是顶层评论的评论编号）
   * @return commentId,content,`time`,userId,username,avatar,
   *     replyCommentId,replyUserId,replyName,replyUserAvatar
   */
  List<Map<String, Object>> selectFloorAllComments(@Param("floorId") String floorId);

  /**
   * 得到评论的楼号
   *
   * @param commentId 评论编号
   * @return 评论的楼号
   */
  String selectFloorId(@Param("commentId") String commentId);

  /**
   * 添加评论后为获取给卖家发通知所需信息专门的接口
   *
   * @param commentId 评论编号
   * @return goodId，goodName,userName,sellerId
   */
  Map<String, Object> selectCommentInfoToNotice(@Param("commentId") String commentId);

  /**
   * 插入一条评论
   *
   * @param userId
   * @param goodId
   * @param commentId
   * @param replyCommentId
   * @param floorId
   * @param content
   */
  void insertAComment(
      @Param("userId") String userId,
      @Param("goodId") String goodId,
      @Param("commentId") String commentId,
      @Param("replyCommentId") String replyCommentId,
      @Param("floorId") String floorId,
      @Param("content") String content);

  int deleteAComment(@Param("userId") String userId, @Param("commentId") String commentId);
}
